/******************************************************************************
 *   文件名: gifwriter.cpp
 *   项目:   DTP
 *   作者:   huangxb
 *   时间:   2025.05.07
 *
 *   ((c)) 版权所有：上海步科电气有限公司.
 *
 *  本软件及相关文档受版权和知识产权法的保护，未经上海步科电气有限公司的书面允
 *  许，不得在任何媒体上直接或者间接地重新生成，改写，发布，组装，传送，
 *  显示，发表和扩散。
 *
 *   描述: 用于生成gif
 *
 *   版本历史:
 *
 *   版本        修改者         修改日期      修改原因
 *   V1.0      huangxb         2025.05.07    创建
 ******************************************************************************/
#include "gifwriter.h"
namespace gifh{
#include "gif.h"
}

struct GifWriterData
{
    QScopedPointer<gifh::GifWriter> writer;
    QSize size;
    bool bValid = false;
};


GifWriter::GifWriter(const QString &strPath, const QSize &size)
    : m_spData(new GifWriterData)
{
    m_spData->writer.reset(new gifh::GifWriter);
    m_spData->size = size;
    m_spData->bValid = gifh::GifBegin(m_spData->writer.get(), strPath.toLocal8Bit().data(), size.width(), size.height(), 1);
}

GifWriter::~GifWriter()
{
    Flush();
}

bool GifWriter::IsValid() const
{
    return m_spData->bValid;
}

bool GifWriter::AddFrame(const QImage &img, int nFrameRate)
{
    if(!IsValid())
    {
        return false;
    }
    // The delay value is the time between frames in hundredths of a second
    int nDelay = static_cast<int>(nFrameRate / 10.0 + 0.5);
    return gifh::GifWriteFrame(m_spData->writer.get(),img.bits(),
                        m_spData->size.width(), m_spData->size.height(),
                        nDelay);
}

void GifWriter::Flush()
{
    gifh::GifEnd(m_spData->writer.get());
}
